package com.hmdp.controller;


import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hmdp.dto.Result;
import com.hmdp.dto.UserDTO;
import com.hmdp.entity.Blog;
import com.hmdp.entity.User;
import com.hmdp.service.IBlogService;
import com.hmdp.service.IUserService;
import com.hmdp.utils.SystemConstants;
import com.hmdp.utils.UserHolder;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author 虎哥
 * @since 2021-12-22
 */
@RestController
@RequestMapping("/blog")
public class BlogController {

    @Resource
    private IBlogService blogService;

    /***
     * @description: TODO :保存博客到数据库并推送给粉丝
     * @params: [blog]
     * @return: com.hmdp.dto.Result
     * @author: SenGang
     */

    @PostMapping
    public Result saveBlog(@RequestBody Blog blog) {

        // 返回id
        return blogService.saveBlog(blog);
    }

    @PutMapping("/like/{id}")
    public Result likeBlog(@PathVariable("id") Long id) {
        // 修改点赞数量
        return blogService.likeBlog(id);
    }

    @GetMapping("/of/me")
    public Result queryMyBlog(@RequestParam(value = "current", defaultValue = "1") Integer current) {
        // 获取登录用户
        UserDTO user = UserHolder.getUser();
        // 根据用户查询
        Page<Blog> page = blogService.query()
                .eq("user_id", user.getId()).page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE));
        // 获取当前页数据
        List<Blog> records = page.getRecords();
        return Result.ok(records);
    }

    @GetMapping("/hot")
    public Result queryHotBlog(@RequestParam(value = "current", defaultValue = "1") Integer current) {

        return blogService.queryHotByCurrent(current);
    }

    /**
     * 用户点击点赞按钮的时候,会发起两个请求
     * 第一个就是直接的点赞按钮,会到达 likeBlog,路径为http://127.0.0.1:8080/api/blog/like/24 也就是修改当前博客的点赞数量
     * 我们设计的是使用set集合.使用当前店铺的 id 作为 key,每一个 key 的 value 中记录点赞过的用户.
     * 如果当前用户已经在这个集合中,说明已经点赞过 否则就是没有点赞过
     * 第二个请求会达到 queryBlogById,路径就是http://127.0.0.1:8080/api/blog/24 也就是查询当前博客的内容
     * 这个内容包含博客用户的信息,以及当前用户是否点赞了这个博客
     * @param id
     * @return
     */
    @GetMapping("{id}")
    public Result queryBlogById(@PathVariable Long id) {
        //查询笔记详情
        return blogService.queryBlogById(id);

    }

    @GetMapping("/likes/{id}")
    public Result queryBlogLikes(@PathVariable Long id) {
        //查询笔记详情
        return blogService.queryBlogLikes(id);

    }

    @GetMapping("/of/user")
    public Result queryBlogByUserId(@RequestParam(value = "current",defaultValue = "1") Integer current,
                                    @RequestParam("id") Long id) {
        //查询笔记详情 分页查询1~10
        Page<Blog> page = blogService.query()
                .eq("user_id",id)
                .page(new Page<>(current,SystemConstants.MAX_PAGE_SIZE));
        //获取当前页的数据
        List<Blog> records = page.getRecords();
        return Result.ok(records);

    }

    /**
     * 滚动查询实现方案
     * @param max 上一次查询的最小时间戳
     * @param offset  偏移量是多少
     * @return
     */
    @GetMapping("/of/follow")
    public Result queryBlogOfFollow(
            @RequestParam("lastId") long max,
            @RequestParam(value = "offset",defaultValue = "0") Integer offset) {
        return blogService.queryBlogOfFollow(max,offset);
    }
}
